Circuit designs to be implemented within integrated circuit devices (ICs) typically are specified in programmatic form, e.g., using a hardware description language (HDL) as is known. The circuit designs can be thoroughly tested through simulation. Simulation refers to a process in which software-based models of the circuit design, typically specified in an HDL, are executed within a simulation environment to mimic the way the circuit design will perform when implemented within an IC. In this sense, simulation refers to a process that takes place entirely within one or more computer systems without a physical implementation of the circuit design in an IC.
Simulation typically entails the creation of a test bench, also referred to as a verification or simulation environment. A test bench refers to HDL descriptions that specify and verify the behavior of the device under test (DUT), in reference a programmatic description of the circuit design. Generating a test bench involves describing the connections, events, and test vectors for different combinations of transactions. A simulation engine is used to execute the test bench with respect to the DUT so that changes to signals and vectors can be observed over time. Typically, a test bench is implemented with a narrow goal in mind, e.g., to exercise a particular flip flop or other narrow portion of the DUT.
Since test benches are manually coded by a developer, test bench development can be a time consuming and error-prone process. As the circuit design continues to evolve, the test bench also must be modified in accordance with any changes made to the circuit design. In consequence, the maintenance of a test bench can be as time consuming and tedious of a process as first developing the test bench.
Another technique for testing circuit designs is called hardware co-simulation. Hardware co-simulation involves instantiating, e.g., synthesizing, the circuit design within an IC and conducting tests on the physical device. The IC can be disposed upon a hardware testing platform that can be coupled to a computer system. Using appropriate operational software on the computer system, various test commands can be provided from the computer system to the IC. Output from the IC can be observed and compared with expected signal output.
Simulation and hardware co-simulation both are valuable tools for circuit designers. Each technique offers a particular set of advantages. The two techniques, however, are mutually exclusive. That is, simulation and hardware co-simulation require different software suites for conducting the tests, different test cases to be developed and maintained, etc. As noted with respect to simulation, maintaining test cases, e.g., signal and vector combinations to be provided to the circuit design to invoke a particular operating state or condition, can be cumbersome. These test cases also must be developed and supported for hardware co-simulation, thereby requiring dual effort.